package educar.gui.student;


import educar.controllers.AddEnrollMateriaController;
import educar.controllers.IController;
import educar.controllers.WindowDispose;
import educar.gui.IView;
import educar.idioma.Locale;
import educar.listeners.ButtonListener;
import educar.models.Materia;
import educar.models.Student;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Point;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import javax.swing.SwingConstants;


public class AddEnrollMateria implements IView {
		/*Ventana principal*/
		private JFrame jfWindow;
		private JComboBox comboBox;
		
	
		/*lista de docentes disponibles*/
		private Materia[] materias = {};
		private Materia materiaSeleccionada;
		
		
		/**
		 * Constructor de la Clase
		 * Crea la ventana que permite definir una
		 * nueva materia y lo almacena en la variable materia
		 * luego se podra obtener atraves de un getMateria
		 * @param newAccion "accion que da nombre a la ventana" 
		 */
		public AddEnrollMateria(Materia[] materias,Student alumno) {
			this.materias = materias;
			/*configuro y creo la ventana*/
			jfWindow = new JFrame();		
			jfWindow.setIconImage(Toolkit.getDefaultToolkit().getImage(IView.class.getResource("/educar/media/educar-icon2.png")));
			/*Segun la dimension de la pantalla (resolucion) Centro la ventana*/
			Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
			Point framePos=new Point((int)(screenSize.width)/2-200,(int)(screenSize.height)/2-150);
			jfWindow.setLocation(framePos);
			/*Renombro la ventana*/
			jfWindow.setTitle(Locale.ADD+" - "+Locale.ASSIGNAMENT);
			/*obtengo el panel contenedor y lo configuro*/
			Container container = jfWindow.getContentPane();
			setupMainContainer(container,alumno);		
			Component verticalGlue = Box.createVerticalGlue();
			verticalGlue.setPreferredSize(new Dimension(0, 5));
			jfWindow.getContentPane().add(verticalGlue);
			/*configura otras caracteristicas*/
			jfWindow.pack();
			jfWindow.setVisible(true);
			jfWindow.setResizable(false);
			jfWindow.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	}

		/**
		 * Configura el contenedor de la ventana
		 * */
		private void setupMainContainer(Container container,Student alumno) {
			/*Configura el estilo del contenedor y le agrega un borde en blanco*/
			container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
			((JComponent) container).setBorder(new EmptyBorder(10, 10, 10, 10));

			/*Agrega un texto*/
			JLabel lblWelcome = new JLabel(Locale.ENROLL+" "+Locale.IN+" "+Locale.ASSIGNAMENT);
			lblWelcome.setAlignmentX(Component.CENTER_ALIGNMENT);
			lblWelcome.setFont(new Font("Serif", Font.BOLD, 16));
			lblWelcome.setBorder(new EmptyBorder(0, 10, 10, 10));
			container.add(lblWelcome);

			
			/*Agrega la casilla de la materia*/
			JLabel lblMateria = new JLabel(Locale.ASSIGNAMENT+" :   ");
			lblMateria.setHorizontalAlignment(SwingConstants.LEFT);
			JPanel materiaPane = new JPanel();
			materiaPane.setLayout(new BoxLayout(materiaPane, BoxLayout.LINE_AXIS));
			materiaPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
			materiaPane.add(lblMateria);
			materiaPane.add(materiaSelector());
			container.add(materiaPane, BorderLayout.PAGE_END);

			
		    /*Crea un panel que contiene los botones*/
			JPanel buttonsPane = new JPanel();
			buttonsPane.setLayout(new BoxLayout(buttonsPane, BoxLayout.LINE_AXIS));
			
			/*Creo el Boton Add*/
			JButton bAdd = new JButton(Locale.ADD);
			bAdd.setAlignmentX(Component.LEFT_ALIGNMENT);
			ButtonListener buttonListener = new ButtonListener();
			IController addController = new AddEnrollMateriaController(alumno);
			addController.setView(this);
			buttonListener.associate(bAdd, addController);	
			
			
			/*Creo el Boton Close*/
			JButton bExit = new JButton(Locale.CLOSE);
			ButtonListener closeListener = new ButtonListener();
			IController closeController = new WindowDispose();
			closeController.setView(this);
			closeListener.associate(bExit, closeController);	
			
			Component verticalGlue = Box.createVerticalGlue();
			verticalGlue.setPreferredSize(new Dimension(0, 10));
			jfWindow.getContentPane().add(verticalGlue);
			bExit.setAlignmentX(Component.RIGHT_ALIGNMENT);
			
		
			/*Agrego los Botones Guardar-Salir*/
			
			Component verticalGlue_1 = Box.createVerticalGlue();
			verticalGlue_1.setPreferredSize(new Dimension(0, 5));
			jfWindow.getContentPane().add(verticalGlue_1);
			buttonsPane.add(bAdd);
			/*Un separador entre los botones*/
			Component verticalStrut = Box.createVerticalStrut(20);
			verticalStrut.setMaximumSize(new Dimension(10, 20));
			buttonsPane.add(verticalStrut);
			buttonsPane.add(bExit);
			/*agrego el panel de botones al final del cuadro principal*/
			container.add(buttonsPane, BorderLayout.PAGE_END);	

			
		}
		/**
		 * TODOS LOS SET Y GET DE LA CLASE
		 */
		

		public Materia getMateria() {
			return materiaSeleccionada;
		}
		
		public void setMateria(Materia materia) {
			this.materiaSeleccionada = materia;
		}

		
		
		/**
		 * Crea una lista desplegable con las materias disponibles
		 * cuando se selecciona uno se actualiza la variable cargo
		 * @return JComboBox "lista de usuarios disponibles"
		 */
		private JComboBox materiaSelector() {
			comboBox = new JComboBox(materias);
			comboBox.setPreferredSize(new Dimension(250, 20));
			comboBox.setSelectedItem(null);
			comboBox.setToolTipText("Select a Assignament");
			comboBox.setVerifyInputWhenFocusTarget(false);
			comboBox.setMinimumSize(new Dimension(150, 20));		
			/*agrego un listener a los items para que cambie la variable user*/
			comboBox.addItemListener(new ItemListener(){
				  public void itemStateChanged(ItemEvent ie){
					  /*obtengo el usuario seleccionado*/
					  setMateria((Materia)comboBox.getSelectedItem());
				  	}
				  });		
			return comboBox;
		}
		
		
	/**
	 * Cierra la ventana actual sin salir del programa
	 */
	public void close(){
		jfWindow.dispose();
	}

	/**
	 * Permite Agregar un listener a la ventana
	 * @param windowAdapter
	 */
	public void addWindowListener(WindowAdapter windowAdapter) {
		jfWindow.addWindowListener(windowAdapter);
		
	}
	
	/**
	 * Sirve para abrir una ventana con texto
	 * @param model "texto a mostrar"
	 */
	public void present(String model) {
		JOptionPane.showMessageDialog(null, model," " + Locale.MESSAGE,1);
	}
	
	/**
	 * Sirve para abrir un carte de warning
	 * @param msg "String texto del mensaje"
	 * @param title "String titulo de la ventana"
	 */
	public void presentWarning(String msg,String title) {
		JOptionPane.showMessageDialog(null,msg,title,JOptionPane.WARNING_MESSAGE);
	}
	
}		
		